ResultSetExtractor Spring JDBC-এর একটি ইন্টারফেস, যা ডেটাবেসের একটি ResultSet থেকে কাস্টম অবজেক্ট তৈরি করতে ব্যবহার করা হয়। এটি জটিল এবং কাস্টমাইজড ডেটা প্রসেসিংয়ের জন্য ব্যবহার করা হয়, যেখানে একটি RowMapper যথেষ্ট নয়।
public interface ResultSetExtractor<T> {
T extractData(ResultSet rs) throws SQLException, DataAccessException;
}
ধরা যাক, আমাদের একটি টেবিল orders
রয়েছে যেখানে অর্ডার এবং প্রোডাক্টের সম্পর্ক রয়েছে। আমরা একটি নেস্টেড অবজেক্ট তৈরি করতে চাই যেখানে প্রতিটি অর্ডারের জন্য প্রোডাক্ট লিস্ট থাকবে।
orders
order_id | product_name | quantity |
---|---|---|
1 | Laptop | 2 |
1 | Mouse | 5 |
2 | Keyboard | 3 |
2 | Monitor | 1 |
import java.util.List;
public class Order {
private int orderId;
private List<Product> products;
// Getters and Setters
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
public class Product {
private String productName;
private int quantity;
// Getters and Setters
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
import org.springframework.jdbc.core.ResultSetExtractor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class OrderResultSetExtractor implements ResultSetExtractor<List<Order>> {
@Override
public List<Order> extractData(ResultSet rs) throws SQLException {
Map<Integer, Order> orderMap = new HashMap<>();
while (rs.next()) {
int orderId = rs.getInt("order_id");
Order order = orderMap.get(orderId);
if (order == null) {
order = new Order();
order.setOrderId(orderId);
order.setProducts(new ArrayList<>());
orderMap.put(orderId, order);
}
Product product = new Product();
product.setProductName(rs.getString("product_name"));
product.setQuantity(rs.getInt("quantity"));
order.getProducts().add(product);
}
return new ArrayList<>(orderMap.values());
}
}
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import java.util.List;
public class ResultSetExtractorExample {
public static void main(String[] args) {
// DataSource Configuration
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
dataSource.setUsername("your_username");
dataSource.setPassword("your_password");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String query = "SELECT order_id, product_name, quantity FROM orders";
// Execute query with ResultSetExtractor
List<Order> orders = jdbcTemplate.query(query, new OrderResultSetExtractor());
// Print orders
for (Order order : orders) {
System.out.println("Order ID: " + order.getOrderId());
for (Product product : order.getProducts()) {
System.out.println(" Product: " + product.getProductName());
System.out.println(" Quantity: " + product.getQuantity());
}
}
}
}
Order ID: 1
Product: Laptop
Quantity: 2
Product: Mouse
Quantity: 5
Order ID: 2
Product: Keyboard
Quantity: 3
Product: Monitor
Quantity: 1
ResultSetExtractor একটি শক্তিশালী ইন্টারফেস যা Spring JDBC-তে জটিল ডেটা ম্যাপিং সহজ করে।
Read more